home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / HARDWARE / IICALARM / !iicAlarm / ABoot (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1994-05-04  |  5KB  |  192 lines

  1.  > AlarmBoot030
  2.  Setzen der Systemvariablen <AlarmMode>
  3.  0 - normaler Start
  4.  1 - Automatikstart
  5.  Wir testen ob die Alarmleitung gesetzt ist und ob das Alarmsystem
  6.  aktiv war. -> Setzen der Variablen.
  7.  Wir lesen die Alarmzeit der Uhr und vergleichen sie mit der Uhrzeit.
  8.  Ist die Alarmzeit mehr als 5 Minuten hinter der aktuellen Zeit, so
  9.  heben wir den Automatikstart wieder auf.
  10.  + 8192
  11.  globale Variablen
  12. >clkadr% = %10100000      :
  13.  IIC-Adresse der Archimedes-Uhr
  14. =file$   = "<Alarmfile>"  :
  15.  Name und Pfad der Alarm-Datei
  16.  cur% 8, alm% 8, buf% 32, ord% 40, str% 64
  17.  "Error in ";
  18. "*CLOSE":
  19. 8debug% = 
  20.            :
  21.  Informationstexte anzeigen ?
  22. "XOS_ReadVarVal", "AlarmExt$Debug", buf%, -1, 0, 0 
  23.  ,,d%
  24.  d%<>0 
  25.  debug% = 
  26. "XWimp_ReadSysInfo", 3 
  27.  d%=0 
  28.  debug% = 
  29.  debug% 
  30.  "AlarmBoot version 0.30, ABt."
  31. 5x% = 
  32. alarmCheck        :
  33.  Teste das Alarmsystem.
  34.  (x% 
  35.  6) = 6 
  36.  Die Alarmleitung ist gesetzt...
  37.  +   
  38.  debug% 
  39.  "The Alarmline is set."
  40. !G   
  41.  weitere Auswertung. Wir vergleichen mit dem 5ByteBlock, ob die
  42. "C   
  43.  Alarm-Zeit + 5 Minuten noch groesser ist als die Echtzeit.
  44. #1   
  45. "Territory_ReadCurrentTimeZone" 
  46.  ,zone%
  47. $E   
  48.  Hole aktuelle Zeit als 5 Byte Block UTC, PRM 565, PRM3 1-421
  49. %'   ?cur% = 3: 
  50. "OS_Word", 14, cur%
  51.  debug% 
  52. 'N      
  53. "Territory_ConvertStandardDateAndTime", -1, cur%, str%, 60 
  54.  ,end%
  55.       ?end% = 13
  56. )       
  57. "current Time: "$str%
  58. +G   
  59.  Wir bereiten den Alarmbuffer vor und setzen das aktuelle Jahr.
  60. ,9   
  61. "Territory_ConvertTimeToUTCOrdinals",,cur%, ord%
  62. -/   
  63.  Wir holen den Alarmbuffer aus der Uhr.
  64. .=   ?buf% = 8                              :
  65.  Startadresse
  66. /=   
  67.  "IIC_Control", clkadr%  , buf%, 1  :
  68.  write address
  69. 0:   
  70.  "IIC_Control", clkadr%+1, buf%, 8  :
  71.  read alarm
  72. 25   
  73.  BCD-Buffer in den Ordinal-Buffer dekodieren.
  74. 3H   
  75.  Ausserdem koennen wir unsere Zeitmodifikationen anbringen, also
  76. 4C   
  77.  die Zeitzone draufaddieren und unseren Bereich dazunehmen.
  78. 5=   ord%!0  = ((buf%?1 
  79.  15) + ((buf%?1 >>>4)*10)) + zone%
  80. 65   ord%!4  = ((buf%?2 
  81.  15) + ((buf%?2 >>>4)*10))
  82. 79   ord%!8  = ((buf%?3 
  83.  15) + ((buf%?3 >>>4)*10)) + 5
  84. 85   ord%!12 = ((buf%?4 
  85.  15) + ((buf%?4 >>>4)*10))
  86. 95   ord%!16 = ((buf%?5 
  87.  15) + ((buf%?5 >>>4)*10))
  88. :5   ord%!20 = ((buf%?6 
  89.  15) + ((buf%?6 >>>4)*10))
  90. ;*   
  91.  --> Ordinale jetzt in local time.
  92. <:   
  93. "Territory_ConvertOrdinalsToTime", -1, alm%, ord%
  94. =+   
  95.  --> jetzt alm% in UTC + 5 Minuten.
  96.  debug% 
  97. ?N      
  98. "Territory_ConvertStandardDateAndTime", -1, alm%, str%, 60 
  99.  ,end%
  100.       ?end% = 13
  101. A       
  102. "Alarmtime: +5 "$str%
  103. CC   
  104.  Jetzt vergleichen, cur% < alm%, dann war Alarm in Ordnung.
  105. D!   a$ = 
  106. bufferTOstring(cur%)
  107. E!   b$ = 
  108. bufferTOstring(alm%)
  109. a$,5) < 
  110. b$,5) 
  111.       *SETEVAL AlarmMode 1
  112. H4      
  113.  debug% 
  114.  "This is an automatic start."
  115.       *SETEVAL AlarmMode 0
  116. K0      
  117.  debug% 
  118. "Alarm out of time-limit."
  119.    *SETEVAL AlarmMode 0
  120. O,   
  121.  debug% 
  122.  "The user has started !"
  123. SN;-------------------------------------------------------------------------
  124. TG; Lesen eines Bytes von einer beliebigen Adresse. Kann auch benutzt
  125. U'; werden, um die Adresse zu setzen.
  126. VN;-------------------------------------------------------------------------
  127. peek(address%)
  128.  blk%
  129.  blk% 2
  130.  clkadr% = 0 
  131.  clkadr% = %10100000
  132. ?blk% = address%
  133.  "IIC_Control", clkadr%,   blk%, 1  :
  134.  write address
  135.  "IIC_Control", clkadr%+1, blk%, 1  :
  136.  read value
  137. = ?blk%
  138. _N;-------------------------------------------------------------------------
  139. `G; Auswerten der beiden Statusregister um zu bestimmen ob die Alarm-
  140. aH; Leitung gesetzt (0) ist und ob das Alarm-System eingeschaltet ist.
  141. b!; = Status (>0 = Alarm aktiv)
  142. ;    Bit0= 1   Timer-Alarm
  143. ;    Bit1= 2   Alarm
  144. e&;    Bit2= 4   Alarm-System ist AN
  145. fN;-------------------------------------------------------------------------
  146. alarmCheck
  147.  str%, alm%, out%
  148. str% = 
  149. peek(0) 
  150.  str%<4 
  151. kE   
  152.  Das Alarm-System ist aus. Bit0 zeigt den Ausgangszustand von
  153. l%   
  154.  Alarm. Bit0=1: Alarm=AKTIV=0
  155.    = str% 
  156. o!   
  157.  Das Alarm-System ist an.
  158. p)   
  159.  Bit0 zeigt einen Timer-Alarm an.
  160. q#   
  161.  Bit1 zeigt einen Alarm an.
  162. rB   
  163.  Dies gilt auch wenn Bit7 -stop counting- gesetzt -1- ist.
  164. s8   
  165.  B0, B1 werden noch maskiert vom Alarm-Register.
  166.    alm% = 
  167. peek(8)
  168.    out% = 4
  169. v5   
  170.  (alm% 
  171.  7)>0  
  172.  (alm% 
  173.  8)=8     
  174.  out% += 1
  175. w5   
  176.  (alm% 
  177.  48)>0 
  178.  (alm% 
  179.  128)=128 
  180.  out% += 2
  181.    = str% 
  182.  out%
  183.  Umsetzen des Buffers in einen String. So kann er einfach als String
  184.  verglichen werden !
  185. bufferTOstring(buffer%)
  186. ~H   =
  187. (buffer%?4)+
  188. (buffer%?3)+
  189. (buffer%?2)+
  190. (buffer%?1)+
  191. (buffer%?0)
  192.